

#include <iostream>
//using std::cout;
//using std::endl;
using namespace std;

//template <class T>
//T Add(T& a,T& b)
//{
//	return a + b;
//}
//
//int main()
//{
//	int a = 9, b = 2;
//	char c = '0';
//
//	cout << typeid(c).name() << endl;
//	cout << typeid((int&)c).name() << endl;
//	cout << &c << endl;
//
//
//	//printf("%d\n", Add(a, b));
//	//printf("%d\n", Add(a, (int&)c));
//
//	//int& d = (int&)c;
//	int& ra = a;
//	int* pa = &a;
//
//	cout << typeid(ra).name() << endl;
//	cout << typeid(pa).name() << endl;
//
//	return 0;
//}

//int main()
//{
//	int i = 2;
//	char c = 'k';
//	
//	cout << &i << endl;
//	cout << &c << endl;
//	printf(&c);
//
//	char* pc = &c;
//	cout << pc << endl;
//	printf("%p\n", pc);
//	printf("%p\n", &c);
//
//	printf("%c\n", '\x02');
//	printf("%s", "				//");
//	printf("%s\n", "\b\b12");
//	printf("%c\n", '\a');
//	printf("%c\n", '\x07');
//
//	return 0;
//}

//int main()
//{
//	char c = 'k';
//	char d = 'j';
//
//	cout << &c << endl;
//	cout << &d << endl;
//
//	return 0;
//}

template <class T>
T Add(const T& a, const T& b)
{
	return a + b;
}

int main()
{
	int a = 1, b = 2;
	double c = 1.1, d = 2.2;

	cout << Add(a, b) << endl;
	cout << Add(c, d) << endl << endl;

	cout << Add<int>(c, d) << endl;
	cout << Add<double>(a, b) << endl;
	printf("%f\n", Add<double>(a, b));

	return 0;
}